package Top101K;

/**
 * @Author quan
 * @Description 旋转数组的最小数字
 * @Date 2023/11/22 14:13
 */
public class BM21_MinNumberInRotateArray {
    public static void main(String[] args) {
        int[] arr = {1,2,3,1};
        System.out.println(minNumberInRotateArray(arr));
    }

    /**
     * 和旋转数组没有什么关系，就是求数组中的最小值。
     * 有一个长度为 n 的非降序数组，比如[1,2,3,4,5]，将它进行旋转，即把一个数组最开始的若干个元素搬到数组的末尾，变成一个旋转数组，
     * 比如变成了[3,4,5,1,2]，或者[4,5,1,2,3]这样的。请问，给定这样一个旋转数组，求数组中的最小值。
     * @param nums [3,4,5,1,2]
     * @return 1
     */
    public static int minNumberInRotateArray (int[] nums) {
        // write code here
        // 边界条件
        if(nums.length == 1){
            return nums[0];
        }
        if(nums.length == 2){
            return Math.min(nums[0],nums[1]);
        }
        // 1- 定义最小值min_num;
        int min_num = Integer.MAX_VALUE;
        // 2- 双层for循环遍历,索引从0 到倒数第一个元素；如果nums[i] < nums[j]，更新最小值min_num = nums[i]
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length-1; j++) {
                if(min_num > Math.min(nums[i],nums[j])){
                    min_num = Math.min(nums[i],nums[j]);
                }
            }
        }
        return min_num;
    }
}
